const fs = require("fs");
const path = require("path");
const WriteStream = require("./WriteStream");
const ws = new WriteStream(path.resolve(__dirname, "copy.txt"), {
  // const ws = fs.createWriteStream(path.resolve(__dirname, "copy.txt"), {
  flags: "w", // 默认不写就是 r 表示我要读取
  autoClose: true,
  emitClose: true,
  start: 0,
  highWaterMark: 3, // 写入 不代表一次写几个，而是表示我的预期
  encoding: "utf8",
});
// fs.write
// let flag = ws.write("a");
// console.log(flag);
// flag = ws.write("b");
// console.log(flag);
// flag = ws.write("c"); // 如何实现消息队列， 类似于浏览器事件环的原理
// console.log(flag);
let i = 0;
// 0 1 2 3 4 5 6 7 8 9
function write() {
  let flag = true;
  while (flag && i < 10) {
    // 每写入3个就暂停，等待写入完成后，在继续写入3个
    flag = ws.write(i++ + "");
    console.log(flag);
  }
}
write();

ws.on("drain", function () {
  console.log("drain");
  write();
});

// 可读流 通过发布订阅 将打开操作 和 读取操作进行分离, 读取流如果变成了流动模式会递归读取，将读取的数据抛出来
// 可写流，用户多次写入 只第一次真的像文件中写入， 后续的写入会排到队列中。 在去写入的时候会按照上述过程继续操作
